package org.dxy.domain.model.aggregate;

import org.dxy.domain.command.product.*;
import org.dxy.domain.model.aggregate.impl.ProductAggRoot;

/**
 * @description: 产品聚合根接口
 * @author: dxy
 * @createTime: 2025/8/17
 */
public interface Product extends AggregateRoot {

    /**
     * 更新产品
     */
    void update(UpdateProductCommand command);

    /**
     * 启用产品
     */
    void enable(EnableProductCommand command);

    /**
     * 禁用产品
     */
    void disable(DisableProductCommand command);

    /**
     * 删除产品
     */
    void delete(DeleteProductCommand command);

    /**
     * 变更产品版本
     */
    void changeVersion(ChangeProductVersionCommand command);

    /**
     * 更新产品BOM
     */
    void updateBOM(UpdateProductBOMCommand command);

    /**
     * 分配工艺路线
     */
    void assignRoute(AssignProductRouteCommand command);

    /**
     * 解绑工艺路线
     */
    void unassignRoute(UnassignProductRouteCommand command);

    /**
     * 审核通过
     */
    void approve(ApproveProductCommand command);

    /**
     * 审核驳回
     */
    void reject(RejectProductCommand command);

    /**
     * 创建产品
     */
    static Product create(Long productId, CreateProductCommand command) {
        return ProductAggRoot.create(productId, command);
    }
}